Micron Document
Livres et Wikis | Archives | Info


JavaScript
part 18/23 Β· 89.0 KB total
layout: Wide Β· Narrow Β· Centered
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
modules. Pour Γ©viter de polluer l'espace global, une mΓ©thode consistait
Γ  encapsuler son code dans une fonction pour s'appuyer sur la portΓ©e des
variables qui a lieu au niveau des fonctions en JavaScript, puis Γ 
invoquer cette fonction juste après. Pour regrouper les deux étapes
(dΓ©finition de la fonction et invocation) et ne pas ajouter un nom de
fonction supplΓ©mentaire dans l'espace global, le langage permet les
expressions de fonctions immΓ©diatement invoquΓ©es (EFII ; en anglais
immediately-invoked function expressions, IIFE)cite-ref-30[30].

Plusieurs syntaxes sont possibles pour ce type d'expression, les plus
rΓ©pandues Γ©tant :

β€’ (function (…) { … }(…)); (syntaxe recommandΓ©e par Douglas Crockford
pour sa lisibilitΓ©)cite-ref-31[31] ;
β€’ (function (…) { … })(…);

L'opΓ©rateur d'invocation de fonction () Γ  la fin permet l'exΓ©cution
immédiate de la fonction. Les parenthèses en gras indiquent à
l'analyseur syntaxique qu'elles contiennent une expression, car en
JavaScript les parenthèses ne peuvent pas contenir de déclaration.
Autrement, dans la plupart des situations, le mot clΓ© function est
traitΓ© comme une dΓ©claration de fonction, et pas comme une expression de
fonction. Il existe d'autres faΓ§ons pour forcer une expression de
fonction :

β€’ !function (…) { … }(…);
β€’ ~function (…) { … }(…);
β€’ -function (…) { … }(…);
β€’ +function (…) { … }(…);

Dans les contextes oΓΉ une expression est attendue il n'est pas
nécessaire d'utiliser les parenthèses en gras :

β€’ var maVariable = function (…) { … }(…);
β€’ true && function (…) { … }(…);
β€’ 0, function (…) { … }(…);

Une utilisation importante des expressions de fonctions immΓ©diatement
invoquΓ©es est pour la crΓ©ation de modules. Les modules permettent Γ  la
fois de rassembler des propriΓ©tΓ©s et des mΓ©thodes dans un espace de nom
et de rendre certains membres privΓ©s :

var compteur = (function () {
var i = 0; // propriΓ©tΓ© privΓ©e
return { // mΓ©thodes publiques
obtenir: function () {
alert(i);
},
mettre: function (valeur) {
i = valeur;
},
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────